﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SistemaLib.Gestores;
using SistemaLib.Entidades;
using SistemaLib.sipe.util;

namespace SistemaLib.Helpers
{
    public static class HelperCharts
    {
        public static string XmlGanttMensualRecurso(int idRH, int mes, int anio)
        {
            List<RecursoCalendario> listaCal = GestorRecursoCalendario.ListarRecursoCalendarioMensual(idRH, mes, anio);
            List<TareaAsignacion> listaTas = GestorTareaAsignacion.ListarTareasMensuales(idRH, mes, anio);

            DateTime monthEnd = FuncionesMeses.ObtieneUltimaFechaDelMes(mes, anio);
            DateTime monthStart = new DateTime(anio, mes, 1);

            Recurso rec = GestorRecursos.CargarRecursoPorId(idRH);

            string xml = @"<chart dateFormat='dd/mm/yyyy' hoverCapBorderColor='2222ff' hoverCapBgColor='e1f5ff' ganttWidthPercent='90' ganttLineAlpha='80' 
                            canvasBorderColor='024455' canvasBorderThickness='0' gridBorderColor='4567aa' gridBorderAlpha='20'
                            bgColor='DFE8F7' backgroundColor='DFE8F7' vmode='transparent'>";
            //Titulo
            xml += "<categories  bgColor='950200'>";
            
            xml += String.Format(@"<category start='{0}' end='{1}' align='center' name='Calendario Recurso: {2}' 
                                    fontColor='ffffff' isBold='1' fontSize='16' />", 
                                    Fechas.FechaFormateada(monthStart), Fechas.FechaFormateada(monthEnd), rec.Nombre);
            xml += "</categories>";

            //Mes
            xml += "<categories  bgColor='4567aa' fontColor='ffffff' fontSize='10' >";
            xml += String.Format("<category start='{0}' end='{1}' align='center' name=' {2}'  fontColor='ffffff' isBold='1' fontSize='16' />", Fechas.FechaFormateada(monthStart), Fechas.FechaFormateada(monthEnd), FuncionesMeses.ObtieneNombreMesLargo(monthStart.Month));
            xml += "</categories>";

            //Dias
            xml += "<categories  bgColor='ffffff' fontColor='4567aa' fontSize='10' >";
            for (int i = 1; i <= monthEnd.Day; i++)
            {
                DateTime fec = new DateTime(monthEnd.Year, monthEnd.Month, i);
                xml += String.Format("<category start='{0}' end='{1}' align='center' name='{2}'  alpha='' font='Verdana' isBold='1' />", Fechas.FechaFormateada(fec), Fechas.FechaFormateada(fec), fec.Day.ToString());
            }
            xml += "</categories>";

            /*** Tareas (EJE Y) ***/
            xml += "<processes headerText='Tareas' fontColor='ffffff' fontSize='10' isBold='1' isAnimated='1' bgColor='4567aa'  headerVAlign='center' headerbgColor='4567aa' headerFontColor='ffffff' headerFontSize='16' align='left'>";
            if (listaTas.Count > 0)
            {
                foreach (TareaAsignacion tas in listaTas)
                {                    
                    Tarea tar = GestorTareas.CargarTareaPorId(tas.IdTarea);
                    xml += String.Format("<process Name='{0}' id='{1}' />", tar.Nombre, tar.Id.ToString());                    
                }
            }
            else
            {
                for(int i=0; i < 5; i++)
                    xml += String.Format("<process Name='Linea {0}' id='{0}' />", i);
            }
            xml += "</processes>";


            /*** Barras de Completitud ***/
            xml += "<tasks  width='50' >";
            foreach (TareaAsignacion tas in listaTas)
            {
                DateTime fecInicio = tas.FechaInicio; 
                DateTime fecFin = tas.FechaFin;

                if (tas.FechaInicio.Month != mes)
                {
                    fecInicio = new DateTime(anio, mes, 1); 
                }
                else
                {
                    if (tas.FechaFin.Month != mes)
                    {
                        fecFin = new DateTime(anio, mes, FuncionesMeses.ObtieneUltimaFechaDelMes(mes, anio).Day);
                    }
                }
                
                Tarea tar = GestorTareas.CargarTareaPorId(tas.IdTarea);
                xml += String.Format("<task name='Estimado' processId='{0}' start='{1}' end='{2}' color='99FF66' height='15' topPadding='5' animation='1'/>", tar.Id.ToString(), Fechas.FechaFormateada(fecInicio), Fechas.FechaFormateada(fecFin));
            }
            xml += "</tasks>";

            xml += "</chart>";

            return xml;
        }

        public static string XmlGanttPlanMensualProyecto(int idProyecto, int mes, int anio)
        {
            List<TareaAsignacion> listaTas = GestorTareaAsignacion.ListarPlanMensualProyecto(idProyecto, mes, anio);

            DateTime monthEnd = FuncionesMeses.ObtieneUltimaFechaDelMes(mes, anio);
            DateTime monthStart = new DateTime(anio, mes, 1);

            Proyecto proy = GestorProyecto.CargarProyecto(idProyecto); 

            string xml = @"<chart dateFormat='dd/mm/yyyy' hoverCapBorderColor='2222ff' hoverCapBgColor='e1f5ff' ganttWidthPercent='90' ganttLineAlpha='80' 
                            canvasBorderColor='024455' canvasBorderThickness='0' gridBorderColor='4567aa' gridBorderAlpha='20'
                            bgColor='DFE8F7' backgroundColor='DFE8F7' vmode='transparent'>";
            //Titulo
            xml += "<categories  bgColor='009999'>";

            xml += String.Format(@"<category start='{0}' end='{1}' align='center' name='Proyecto: {2}' 
                                    fontColor='ffffff' isBold='1' fontSize='16' />",
                                    Fechas.FechaFormateada(monthStart), Fechas.FechaFormateada(monthEnd), proy.Nombre + "- Responsable: " + proy.Responsable );
            xml += "</categories>";

            //Mes
            xml += "<categories  bgColor='4567aa' fontColor='ff0000' fontSize='10' >";
            xml += String.Format("<category start='{0}' end='{1}' align='center' name=' {2}'  fontColor='ffffff' isBold='1' fontSize='16' />", Fechas.FechaFormateada(monthStart), Fechas.FechaFormateada(monthEnd), FuncionesMeses.ObtieneNombreMesLargo(monthStart.Month));
            xml += "</categories>";

            //Dias
            xml += "<categories  bgColor='ffffff' fontColor='1288dd' fontSize='10' >";
            for (int i = 1; i <= monthEnd.Day; i++)
            {
                DateTime fec = new DateTime(monthEnd.Year, monthEnd.Month, i);
                xml += String.Format("<category start='{0}' end='{1}' align='center' name='{2}'  alpha='' font='Verdana' isBold='1' />", Fechas.FechaFormateada(fec), Fechas.FechaFormateada(fec), fec.Day.ToString());
            }
            xml += "</categories>";

            /*** Tareas (EJE Y) ***/
            xml += "<processes headerText='Tareas' fontColor='ffffff' fontSize='10' isBold='1' isAnimated='1' bgColor='4567aa'  headerVAlign='center' headerbgColor='4567aa' headerFontColor='ffffff' headerFontSize='16' align='left'>";
            if (listaTas.Count > 0)
            {
                foreach (TareaAsignacion tas in listaTas)
                {
                    Tarea tar = GestorTareas.CargarTareaPorId(tas.IdTarea);
                    xml += String.Format("<process Name='{0}' id='{1}' />", tar.Nombre, tar.Id.ToString());
                }
            }
            else
            {
                for (int i = 0; i < 5; i++)
                    xml += String.Format("<process Name='Linea {0}' id='{0}' />", i);
            }
            xml += "</processes>";


            /*** Barras de Completitud ***/
            xml += "<tasks  width='50' >";
            foreach (TareaAsignacion tas in listaTas)
            {
                DateTime fecInicio = tas.FechaInicio;
                DateTime fecFin = tas.FechaFin;

                if (tas.FechaInicio.Month != mes)
                {
                    fecInicio = new DateTime(anio, mes, 1);
                }
                else
                {
                    if (tas.FechaFin.Month != mes)
                    {
                        fecFin = new DateTime(anio, mes, FuncionesMeses.ObtieneUltimaFechaDelMes(mes, anio).Day);
                    }
                }

                Tarea tar = GestorTareas.CargarTareaPorId(tas.IdTarea);
                xml += String.Format("<task name='Estimado' processId='{0}' start='{1}' end='{2}' color='cccccc' height='15' topPadding='5' animation='1'/>", tar.Id.ToString(), Fechas.FechaFormateada(fecInicio), Fechas.FechaFormateada(fecFin));
            }
            xml += "</tasks>";

            xml += "</chart>";

            return xml;
        }
    }
}
